package com.translate.web.config.common.excecption.runtime;

import java.text.MessageFormat;

import com.common.util.StringUtil;



/**
 * 类名： SystemRuntimeException 概要： 系统运行异常
 */
public class SystemRuntimeException extends RuntimeException {

	public static final String defMessageCode = "system.error";

	/**
	 * serialVersionUID
	 */
	private static final long serialVersionUID = 6661251866187620001L;

	private String messageCode;

	private Object[] args;

	private String message;

	/**
	 * 构造器。
	 *
	 * @param messageCode Message代码
	 */
	public SystemRuntimeException(String messageCode) {
		this(messageCode, (Object[]) null, null);
	}

	/**
	 * 构造器。
	 *
	 * @param messageCode Message代码
	 * @param args        Message参数
	 */
	public SystemRuntimeException(String messageCode, Object[] args) {
		this(messageCode, args, null);
	}

	/**
	 * 构造器。
	 *
	 * @param messageCode Message代码
	 * @param message     Message
	 */
	public SystemRuntimeException(String messageCode, String message) {
		this(messageCode, message, null);
	}

	/**
	 * 构造器。
	 *
	 * @param messageCode Message代码
	 * @param message     Message
	 * @param cause       异常
	 */
	public SystemRuntimeException(String messageCode, String message, Throwable cause) {
		super(cause);
		this.messageCode = messageCode;
		this.message = message;
	}

	/**
	 * 构造器。
	 *
	 * @param messageCode Message代码
	 * @param args        Message参数
	 * @param cause       异常
	 */
	public SystemRuntimeException(String messageCode, Object[] args, Throwable cause) {

		super(cause);
		this.messageCode = messageCode;
		this.args = args;
	}

	/**
	 * 构造器。
	 *
	 * @param cause 异常
	 */
	public SystemRuntimeException(Throwable cause) {
		this(defMessageCode, cause == null ? null : new Object[] { cause.getMessage() }, cause);
	}

	/**
	 * 构造器。
	 */
	public SystemRuntimeException() {
		this(defMessageCode, (Object[]) null, null);
	}

	/**
	 * 返回Message代码。
	 *
	 * @return Message代码
	 */
	public String getMessageCode() {
		return messageCode;
	}

	/**
	 * 返回Message参数数组。
	 *
	 * @return Message参数数组
	 */
	public Object[] getArgs() {
		return args;
	}

	/**
	 * 返回Message
	 *
	 * @return Message
	 */
	public String getMessage() {
		if (StringUtil.isNotEmpty(message)) {
			return message;
		}
		if (StringUtil.equals(messageCode, defMessageCode)) {
			// 默认MessageSource
			return getMessageCode() + getArgs().toString();
		}
		return "";
//		} else {
//			// DB ResultCode
////			ResultCodeService resultCodeService = SpringBeanUtil.getBean(ResultCodeService.class);
////			TcResultCode resultCode = resultCodeService.getMessage(getMessageCode());
////			return MessageFormat.format(resultCode.getMessage(), getArgs());
//		}
	}

}
